package org.rslai.autotest.core.page;

import org.springframework.beans.factory.DisposableBean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;

/**
 * 保存 Spring ApplicationContext，可在需要的时候候取出 ApplicaitonContext 或 bean
 * @author rslai
 */
public interface SpringContext extends ApplicationContextAware, DisposableBean {

	/**
	 * 返回 ApplicationContext
	 * @return ApplicationContext
	 */
	public ApplicationContext getApplicationContext();

	/**
	 * 从 applicationContext 返回Bean, 自动转型为所赋值对象的类型
	 * @param <T>
	 * @param name bean名称
	 * @return bean 实例
	 */
	public <T> T getBean(String name);

	/**
	 * 从静态变量applicationContext中取得Bean, 自动转型为所赋值对象的类型.
	 * @param <T>
	 * @param requiredType bean类型
	 * @return bean 实例
	 */
	public <T> T getBean(Class<T> requiredType);

	/**
	 * 清除SpringContextHolder中的ApplicationContext为Null.
	 */
	public void clearHolder();

}